Vaporで始めるサーバーサイドSwift 〜Mac上での環境構築からHello, World!まで〜 (swiftenv, Vapor Toolboxを使用)
はじめに
こんぬづは、ドミニオンで一度も勝てたことのない田中です。
さて、今回の記事ではMac上で行うVaporによるサーバーサイドSwiftことはじめを紹介していきます。VaporというのはSwiftで書かれたWebフレームワークのことです。
今回取り扱うサーバーサイドSwiftとそれを取り巻くツールや環境は現在、発展の早いSwift界隈の中でも特に変更が多い分野となっています。この記事で紹介する方法もすぐに古くなってしまう可能性があるので、あくまで参考として見ていただければと思います。
もくじ
- 検証環境
- swiftenvの導入
- Vapor Toolboxをインストールする
- プロジェクトを作成する
- Hello, World!を書く
- サーバーを立ち上げる
- ウェブブラウザでサーバーを確認する
- まとめ
- 参考・関連
検証環境
- macOS Sierra 10.12.2
- Homebrew 1.1.7
- swiftenv 1.2.1
- Swift Snapshot DEVELOPMENT-SNAPSHOT-2017-01-16-a
- Vapor Toolbox v1.0.3
- Xcode 8.2.1
swiftenvの導入
Swiftのバージョンを管理するためのswiftenvというツールをインストールします。swiftenvを入れることで、プロジェクトごとのSwiftのバージョンを切り替えるのが楽になります。メインでiOS開発をしているけれども、サーバーサイドでは別なバージョンのSwiftを使いたい、といったときに便利です。
swiftenvがどういうものかは、Node.jsを使ったことのある方であればnvmやnodebrewのようなものと想像していただければオーケーです。
swiftenvのインストール
公式ドキュメントのVia Homebrewの項目を元にHomebrewを使ってインストール作業を行います。
$ brew install kylef/formulae/swiftenv
次にパスを通します。Bashの場合以下のコマンドを実行します。公式ドキュメントにはBash以外にも、ZSHとFishを用いる場合の方法も紹介されています。
$ echo 'if which swiftenv > /dev/null; then eval "$(swiftenv init -)"; fi' >> ~/.bash_profile
パスを通したらswiftenvのバージョンを確認して、正しくインストールされているか確認しましょう。コマンドが実行され、このmacにインストールされているswiftのバージョンが表示されていればswiftenvのインストールは完了です。
$ swiftenv versions
任意のバージョンのSwiftスナップショットをインストールする
Swiftの公式サイト、Swift.orgのダウンロードページのSnapshotsの項から任意のバージョンのSwiftのスナップショットをインストールします。今回はこの記事執筆時点での最新バージョン、January 16, 2017のDateのものをswiftenvでインストールします。
下の画像の赤枠箇所を右クリックして「リンクのアドレスをコピー」を選択します。
アドレスをコピーしたらswiftenvを使ってインストールします。
$ swiftenv install <コピーしたアドレス>
今回の場合だと以下の具体例になります。
$ swiftenv install https://swift.org/builds/development/xcode/swift-DEVELOPMENT-SNAPSHOT-2017-01-16-a/swift-DEVELOPMENT-SNAPSHOT-2017-01-16-a-osx.pkg
インストールの最中にパスワードを聞かれるので入力して、成功すると以下の画像のようになります。
ここで今インストールしたバージョンが正しくインストールされているかを確認します。
$ swiftenv versions
以下の画像のようにダウンロードしたバージョンが表示されれば完了です。
頭に*がついているものが現在指定しているswiftのバージョンになります。一番新しくインストールしたバージョンが指定されるようですね。
使用するSwiftのバージョンを指定する
インストールされているSwiftのバージョンを切り替える方法を見ていきます。
バージョンを切り替えるには以下のコマンドを実行します。
$ swiftenv global <バージョン>
今回の場合だと、すでに先ほど確認した通りインストールしたDEVELOPMENT-SNAPSHOT-2017-01-16-aのバージョンが指定されてはいますが、あえて指定すると、
$ swiftenf global DEVELOPMENT-SNAPSHOT-2017-01-16-a
となります。
再度swiftenv versionsコマンドで見てみると、頭に*印が付いているので正しく指定されています。
もしこれまで使っていたバージョンに戻したい場合も同じバージョン指定のやり方で戻すことができます。
Vapor Toolboxをインストールする
Vapor ToolboxというのはVaporプロジェクトに関するショートカットを提供してくれるCLIツールになります。
Homebrewを使って以下のコマンドでインストールすることができます。
$ brew install vapor/tap/toolbox
インストールが完了したら以下の画像のようにvapor --helpコマンドを使ってその入力を受け付けてくれるかどうかでVapor Toolboxが利用可能になっているか確認しましょう。
ここまでで環境構築は完了です。
プロジェクトを作成する
Vaporプロジェクトを作成する
次にプロジェクトを作成しましょう。プロジェクトを置いておきたい適当なディレクトリで以下のコマンドを実行します。
$ vapor new <プロジェクト名>
今回はHelloWorldProjという名前でプロジェクトを作成するので、
$ vapor new HelloWorldProj
となります。
テンプレートをもとにプロジェクトの作成が完了すると、ターミナル上にVaporのロゴがAAで表示されます。
Xcodeを使ってソースコードを編集したい場合には
Xcode上でソースコードを編集したい場合はXcodeプロジェクトを作成する必要があります。
プロジェクトのルートにXcodeプロジェクトを作成するためにディレクトリを移動します。
$ cd HelloWorldProj
プロジェクトのルートディレクトリに移動したら以下のコマンドを実行してXcodeプロジェクトを作成します。このコマンドの実行中に "Open Xcode project?" と聞かれるので答える必要があります。yと答えるとXcodeプロジェクトの作成完了とともにプロジェクトをXcodeで開いてくれます。
$ vapor xcode
Hello, World!を書く
作成したVaporプロジェクトにはすでにテンプレートが作成されています。編集していくのは以下のパスにあるmain.swiftというファイルになります。
HelloWorldProj > Sources > App > main.swift
main.swiftにはすでに以下のようなテンプレート生成されたソースコードが書かれています。
import Vapor let drop = Droplet() drop.get { req in return try drop.view.make("welcome", [ "message": drop.localization[req.lang, "welcome", "title"] ]) } drop.resource("posts", PostController()) drop.run()
細かな説明は省略しますが、ここにHello, World!を表示するための書き換えを加えます。
drop.get("hello") { request in return "Hello, World!" }
これで hello というエンドポイントにアクセスすることで "Hello, World!" という文字列を返すように書き換えることができました。
もとのコードと合わせた完成形は以下になります。
import Vapor let drop = Droplet() drop.get { req in return try drop.view.make("welcome", [ "message": drop.localization[req.lang, "welcome", "title"] ]) } drop.resource("posts", PostController()) drop.get("hello") { request in return "Hello, World!" } drop.run()
サーバーを立ち上げる
ターミナルに戻って以下のコマンドでプロジェクトをビルドします。
$ vapor build
ビルドが完了すると以下の画像のような結果が返されます。
ビルドが完了したらサーバーを立ち上げます。
$ vapor run serve
これでポート番号8080でローカルにサーバーを立ち上げることができました。
ウェブブラウザでサーバーを確認する
最後に、ウェブブラウザでサーバーが動作していることを確認します。0.0.0.0:8080にアクセスするとVaporがデフォルトで用意した以下の画像のようなサイトが表示されます。
Hello, World!を表示させるには0.0.0.0:8080/helloにアクセスします。
Done!!!
まとめ
以上、サーバーサイドSwiftの入門としてVapor, Vapor Toolbox, swiftenvの使い方を紹介しました。
手動でプロジェクトを作成して、SwiftPackageManagerを使ってVaporをインストールする方法もありますが、Vaporを扱うことに限ればVapor ToolboxがXcodeプロジェクトの作成までやってくれるのでオススメです。サーバーサイドを書くために必要なパッケージ群もまとめられているようなので、ひとまずサーバーサイドSwiftにVaporを使うのはアリではないかと私は思っています。